// 定义一个函数内部返回this，这个this指向什么呢？
'use strict'; // 2.经过测试，使用严格模式后函数内部的this指向变成了 undefined
function backThis() {
  return this;
}

// 1.正常情况(松散模式)下，我们可以看到this指向为Window，如果在函数外部或内部使用严格模式呢？
console.log(backThis());

// 如果我们使用window或this去调用此函数会不会有所不同呢？
// web环境
if (true) {
  // - window
  console.log(window.backThis());
  // - this
  console.log(this.backThis());
  // - globalThis
  console.log(globalThis.backThis());
  // - self
  console.log(self.backThis());
  // - frames
  console.log(frames.backThis());
}

// 3.测试发现，使用window、this、globalThis、self、frames都成功让函数内部this指向为了Window，这是怎么回事呢？
// 其实就是用谁调用指向谁的原理

// Node环境
if (false) {
  global.a = '1';
  // console.log(window); // Error: window is not defined
  console.log(a); // 1
  console.log(global.a); // 1
  console.log(globalThis.a); // 1
  console.log(this.a); // undefined
}

// 在Node环境下 global取代了window
/**
 * 获取全局对象
 * web  : window, this, self, frames，globalThis
 * Node : global，globalThis
 * woker: self，globalThis
 * 通用  : globalThis
 */